package ProjectoX;

import java.awt.event.KeyEvent;

public class Mario extends Personaje{
	
	protected boolean invencible;
	protected static final int PLAYER_SPEED = 5;
	protected boolean enTierra;
	protected boolean continuarSaltando, salto;
	protected int posBase;
	protected boolean left, right;
	protected String [] NombresSpriteMov;
	protected String [] NombresSpriteMovIz;
	protected int AltoM = 43;
	protected int AnchoM = 43;
	final protected int AltoC = 50;  //BORRAR DSP
	final protected int AnchoC = 50;
	
	
	public Mario(Nivel nivel) {
		super(nivel);
		NombresSpriteMov = new String [] {"Mario/mario1.png", "Mario/mario2.png", "Mario/mario3.png", "Mario/mario4.png", 
										  "Mario/mario5.png", "Mario/mario6.png", "Mario/mario7.png", "Mario/mario8.png", };
		NombresSpriteMovIz = new String [] {"Mario/mario1_iz.png", "Mario/mario2_iz.png", "Mario/mario3_iz.png", "Mario/mario4_iz.png", 
											"Mario/mario5_iz.png", "Mario/mario6_iz.png", "Mario/mario7_iz.png", "Mario/mario8_iz.png", };
		enTierra = true;
		salto = false;
		continuarSaltando = false;
		GetMov().setMovHorizontal(0);
		GetMov().setMovVertical(PLAYER_SPEED);
		Pos = new Posicion(319, 0, AnchoM, AltoM);
		posBase = Pos.getY();
		setSpriteName(new String [] {"Mario/mario.png"});
		setFrameSpeed(10);
	}
	
	public void colision (Componente C) {
		C.colision(this);
	}
	
	
	public void colision(Enemigo E) {
		E.colision(this);
	}
	
	public void matar(Enemigo E) {
		if (!E.isMarkedForRemoval())
			miNivel.getSoundCache().playSound("Sonidos/kick.wav");
		if (invencible) {
			E.remove();
		}
		else {
			E.morir();
			GetMov().setMovVertical(-PLAYER_SPEED);
			posBase = Pos.getY();
			enTierra = false;
		 	salto = true;	
		}
	 	
	}
	
	public void teclaPresionada(KeyEvent e) {
		switch (e.getKeyCode()) {
			case	KeyEvent.VK_UP : 	if (enTierra) {
										GetMov().setMovVertical(-PLAYER_SPEED);
									 	posBase = Pos.getY();
									 	enTierra = false;
									 	salto = true;
									 	continuarSaltando = true;
									 	miNivel.getSoundCache().playSound("Sonidos/smw_jump.wav");
								 	 }
									 break;
			case	KeyEvent.VK_LEFT : left = true;
									   setSpriteName(NombresSpriteMovIz);
									   break;
			case	KeyEvent.VK_RIGHT : right = true;
										setSpriteName(NombresSpriteMov);
										break;
		}
		updateSpeed();
	}

	public void teclaSoltada(KeyEvent e) {
			
		switch (e.getKeyCode()) {
		
			case	KeyEvent.VK_UP : continuarSaltando = false; 
								     break;
			case	KeyEvent.VK_LEFT : left = false;
									   if (!right) 
										   if (invencible) 
											   setSpriteName(new String [] {"Mario/mario2_iz.png", "Mario/mariobrilla2_iz.png"});
										   else setSpriteName(new String [] {"Mario/mario7_iz.png"});
									   break;
			case	KeyEvent.VK_RIGHT : right = false;
										if (!left)  
											   if (invencible) 
												   setSpriteName(new String [] {"Mario/mario2.png", "Mario/mariobrilla2.png"});
											   else setSpriteName(new String [] {"Mario/mario7.png"});
			break;
		}
		updateSpeed();
	}
	
	protected void updateSpeed() {
		GetMov().setMovHorizontal(0);
	  	if (right) GetMov().setMovHorizontal(PLAYER_SPEED);
	  	if (left) GetMov().setMovHorizontal(-PLAYER_SPEED);
	  }
	
	public void actuar() {
		super.actuar();
		Pos.setX(Pos.getX()+GetMov().getVelX());
		Pos.setY(Pos.getY()+GetMov().getVelY());
		if (enTierra)
			GetMov().setMovVertical(PLAYER_SPEED);
		enTierra = false;
		if (Pos.getX() < 0)
			Pos.setX(0);
		if (Pos.getX() > 11800)
			miNivel.Animar();
		if (Pos.getY()>800) {
			if (!isMarkedForRemoval())
				miNivel.incrementarPuntaje(15);
			remove();
		}
		if (salto)
			if (continuarSaltando){
			if ((Pos.getY()<(posBase-(AltoC*4))))
				invertirSalto();
		}
			else if (Pos.getY()<(posBase-AltoC))
				invertirSalto();
	}
	

	public void invertirSalto() {
		GetMov().setMovVertical(PLAYER_SPEED);	
	}
	
	public void detenerSalto(Componente C) {
		Pos.setY(C.getPos().getY()-AltoM+1);
		enTierra= true;
		GetMov().setMovVertical(0);
		salto = false;
	}
	
	public void setPosBase(int x) {
		posBase = x;
	}
	
	public void setInvencible(){
		invencible = true;
		NombresSpriteMov = new String [] {"Mario/mario1.png", "Mario/mariobrilla2.png", "Mario/mario3.png", "Mario/mariobrilla4.png", 
				  "Mario/mario5.png", "Mario/mario6.png", "Mario/mario7.png", "Mario/mario8.png", };
		NombresSpriteMovIz = new String [] {"Mario/mario1_iz.png", "Mario/mariobrilla2_iz.png", "Mario/mario3_iz.png", "Mario/mariobrilla4_iz.png", 
					"Mario/mario5_iz.png", "Mario/mario6_iz.png", "Mario/mario7_iz.png", "Mario/mario8_iz.png", };
		new Reminder(150, this);
	}
	
	public void setVencible() {
		invencible = false;
		String aux = getNombresSprite()[0];
		NombresSpriteMov = new String [] {	aux	};
		setSpriteName(NombresSpriteMov);
		NombresSpriteMov = new String [] {"Mario/mario1.png", "Mario/mario2.png", "Mario/mario3.png", "Mario/mario4.png", 
				  "Mario/mario5.png", "Mario/mario6.png", "Mario/mario7.png", "Mario/mario8.png", };
		NombresSpriteMovIz = new String [] {"Mario/mario1_iz.png", "Mario/mario2_iz.png", "Mario/mario3_iz.png", "Mario/mario4_iz.png", 
					"Mario/mario5_iz.png", "Mario/mario6_iz.png", "Mario/mario7_iz.png", "Mario/mario8_iz.png", };
		
	}
	
	public boolean esInvencible () {
		return invencible;
	}
	
}
